package com.zy.Redis;

//Redis的使用；Jedis:基于Java语言的Redis客户端
import com.zy.util.JedisUtils;
import org.junit.Test;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class RedisTest
{
    @Test
    public void Test1()
    {
        //1、获取连接
        Jedis jedis=new Jedis("localhost",6379);//使用空参构造，默认值为"localhost",6379

        //2、调用方法
        jedis.set("username","zhangsan");

        //3、关闭连接
        jedis.close();
    }

    //操作字符串String类型的数据
    @Test
    public void Test2()
    {
        //1、获取连接
        Jedis jedis=new Jedis("localhost",6379);

        //2、调用方法
        //添加数据
        jedis.set("username","zhangsan");
        jedis.setex("activecode", 10, "ABCD");//设置值的存储时间为10秒

        //获取数据
        String username = jedis.get("username");
        System.out.println(username);
        //删除数据,返回影响的行数
        Long username1 = jedis.del("username");
        System.out.println(username1);

        //3、关闭连接
        jedis.close();
    }

    //操作哈希hash类型的数据
    @Test
    public void Test3()
    {
        //1、获取连接
        Jedis jedis=new Jedis("localhost",6379);

        //2、调用方法
        //添加数据
        jedis.hset("person","username","zhangsan");
        jedis.hset("person","age","23");
        jedis.hset("person","gender","男");
        //获取数据
        String hget = jedis.hget("person", "username");
        String hget1 = jedis.hget("person", "gender");
        Map<String, String> person1 = jedis.hgetAll("person");
        System.out.println(hget+"  "+hget1);
        Set<String> strings = person1.keySet();
        for(String value :strings)
            System.out.println(value+":"+person1.get(value));

        //删除数据,返回影响的行数
        Long person = jedis.hdel("person","username");
        System.out.println(person);

        //3、关闭连接
        jedis.close();
    }

    //操作链表list类型的数据
    @Test
    public void Test4()
    {
        //1、获取连接
        Jedis jedis=new Jedis("localhost",6379);

        //2、调用方法
        //添加数据
        jedis.lpush("mylist","zhangsan");
        jedis.rpush("mylist","23");
        jedis.rpush("mylist","男");

        //获取数据
        List<String> person1 = jedis.lrange("mylist", 0, -1);
        System.out.println(person1);

        //删除数据,返回影响的行数
        String person2 = jedis.lpop("mylist");
        System.out.println(person2);

        //3、关闭连接
        jedis.close();
    }

    //操作集合set类型的数据
    @Test
    public void Test5()
    {
        //1、获取连接
        Jedis jedis=new Jedis("localhost",6379);

        //2、调用方法
        //添加数据
        jedis.sadd("myset","a");
        jedis.sadd("myset","a");
        jedis.sadd("myset","b");

        //获取数据
        Set<String> myset = jedis.smembers("myset");
        for(String value:myset)
            System.out.println(value);

        //删除数据,返回影响的行数
        Long myset1 = jedis.srem("myset","a");
        System.out.println(myset1);

        //3、关闭连接
        jedis.close();
    }

    //操作有序集合sortset类型的数据
    @Test
    public void Test6()
    {
        //1、获取连接
        Jedis jedis=new Jedis("localhost",6379);

        //2、调用方法
        //添加数据
        jedis.zadd("mysortset",50,"a");
        jedis.zadd("mysortset",60,"a");
        jedis.zadd("mysortset",45,"b");
        jedis.zadd("mysortset",70,"c");

        //获取数据
        Set<String> mysortset = jedis.zrange("mysortset", 0, -1);
        for(String value:mysortset)
            System.out.println(value);

        //删除数据,返回影响的行数
        Long myset1 = jedis.zrem("mysortset","a");
        System.out.println(myset1);

        //3、关闭连接
        jedis.close();
    }

    /*
     使用jedis连接池
    * */
    @Test
    public void Test7()
    {
        //0、配置连接池
        JedisPoolConfig jedisPoolConfig=new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(50);//最大连接数
        jedisPoolConfig.setMaxIdle(10);//最大空闲连接数

        //1、获取连接池对象
        JedisPool jedisPool=new JedisPool(jedisPoolConfig,"localhost",6379);

        //2、注册连接
        Jedis resource = jedisPool.getResource();

        //3、使用,添加数据
        resource.set("username","zhangsan");
        resource.set("gender","男");

        //获取数据
        String username = resource.get("username");
        System.out.println(username);

        //3、关闭，归还给连接池
        resource.close();
    }
    
    @Test
    public void Test8()
    {
        //1、使用工具类，获取连接
        Jedis jedisPool = JedisUtils.getJedisPool();
        jedisPool.set("username","zhangsan");

        //2、存储数据
        String username = jedisPool.get("username");
        System.out.println(username);

        //3、归还给连接池
        jedisPool.close();
    }
}
